package edu.cuit.canary.selection;

/**
 * 逻辑操作符
 *  逻辑与
 *  逻辑或
 *  逻辑非
 *  亦或(了解)
 */
public class LogicOperatorDemo {
    public static void main(String[] args) {
        int age = 24;
        int weight = 98;
        /**
         * &&和&
         *     相同点：两者都可以进行逻辑与运算（多个条件同时满足结果为true）
         *  不同点：
         *      && 具有短路运算，而&不具备短路运算，作逻辑与运算时，建议使用&&
         *      &可以进行位运算
         */
        boolean ret =  age > 18 && weight < 120; //true
        boolean ret1 =  age > 18 & weight < 120; //true

        System.out.println(ret + "====" + ret1);
        System.out.println(age > 25 && 10 / 0 == 0); //false
        //System.out.println(age > 25 & 10 / 0 == 0);
        System.out.println(Integer.toBinaryString(10));
        System.out.println(Integer.toBinaryString(20));
        System.out.println(10 & 20);

        /**
         * ||和|
         *     相同点：两者都可以进行逻辑或运算（1个条件为true结果为true）
         *     不同点：
         *         ||具有短路运算，而|不具备短路运算，作逻辑或运算时，建议使用||（前面只有有一个条件为true，整个结果即为true，后续表达式不再进行运算）
         *         |可以进行位运算
         */
        System.out.println(age < 25 || weight > 100);//true
        System.out.println(age < 25 | weight > 100);//true

        System.out.println(10 | 20);

        System.out.println(!(age >= 18)); //false
        System.out.println(!(weight == 100)); //true

        System.out.println(true ^ true); //false
        System.out.println(false ^ false); //false
        System.out.println(true ^ false); //true

        System.out.println(10 ^ 20);
    }
}
